//***************************************************************************//
//*
//* 内容摘要：收到底层数据或通知进行处理的抽象类.
//*	
//* 当前版本：V1.0		
//* 作    者：zhfayuan
//* 完成日期：2015-12-26
//**************************************************************************//
#if !defined(SDMEDIAIFACE_H)
#define SDMEDIAIFACE_H

#include "SDAVProcess.h"


// 接收到码流或底层反馈时，通过虚函数通知外层
class CSDMediaIFace
{
public:
	CSDMediaIFace() 
	{

	}

	virtual ~CSDMediaIFace() 
	{

	}


	//来自底层的退出反馈（比如与服务器之间TCP连接断开时，将通过本接口反馈应用层）
	virtual void OnSystemExit(UINT unExitCause) = 0;
	
	// 收到服务器发来的视频
	virtual void OnRemoteVideo(UINT64 unRoomId,BYTE byCodec,BYTE byIndex, BYTE* data, UINT unLen, UINT unPTS, VideoFrameInfo tFrameInfo) = 0;

	// 收到服务器发来的音频
	virtual void OnRemoteAudio(UINT64 unRoomId,BYTE byCodec,BYTE byIndex, BYTE* data, UINT unLen, UINT unPTS, AudioFrameInfo tFrameInfo) = 0;

	// 收到服务器发来的自定义命令
    virtual void OnRemoteCmd(USHORT cmd,USHORT subCmd,BYTE*data,UINT unLen) = 0;

	// 加密秘钥交换成功
    virtual void OnKeyNegotiated(UINT unKeyToken,BYTE*key,UINT unKeyLen) = 0;

	//流是否解密成功,不加密的流不会调用,加密流会调用
	virtual void OnStreamDecryptFailed(UINT64 unRoomId, BYTE byIndex) = 0;

	//文件转码结果,toEnd表示
	virtual void OnFileExtractResult(std::string strPath,BYTE toEnd,UINT unExitCause) = 0;

	//文件转码进度
	virtual void OnFileExtractProgress(std::string strPath,BYTE percent) = 0;

    virtual void OnAVProviderOnPosition(UINT64 unUid,UINT64 unRoomId,BYTE byAvIndex) = 0;

    virtual void OnAVProviderOffPosition(UINT64 unUid,UINT64 unRoomId,BYTE byAvIndex) = 0;
};

#endif // !defined(SDTERMCMDIFACE_H)
